﻿Imports System.IO

Public Class ExploradorCarpetas

    ''' <summary>
    ''' Carga el directorio que marca la rutaRaiz (el TextBox1)
    ''' </summary>
    ''' <param name="rutaRaiz">Ruta raiz</param>
    ''' <remarks></remarks>
    Public Sub cargarCarpetas(ByVal rutaRaiz As String)
        Dim nodoBase As System.Windows.Forms.TreeNode

        If IO.Directory.Exists(rutaRaiz) Then
            'Condición que marca el nombre del nodo, dependiendo de su longitud 
            If rutaRaiz.Length <= 3 Then
                nodoBase = Form1.TreeView1.Nodes.Add(rutaRaiz)
            Else
                nodoBase = Form1.TreeView1.Nodes.Add(My.Computer.FileSystem.GetName(rutaRaiz))
            End If
            nodoBase.Tag = rutaRaiz
            cargarSubcarpetas(rutaRaiz, nodoBase)
        End If
    End Sub

    ''' <summary>
    ''' Carga las subcarpetas
    ''' </summary>
    ''' <param name="rutaRaiz">Ruta Raiz</param>
    ''' <param name="nodoMadre">Nodo del que van a salir el resto de subnodos</param>
    ''' <remarks></remarks>
    Public Sub cargarSubcarpetas(ByVal rutaRaiz As String, ByVal nodoMadre As Windows.Forms.TreeNode)
        On Error Resume Next
        Dim carpetaActual As String
        Dim indice As Integer

        If nodoMadre.Nodes.Count = 0 Then
            For Each carpetaActual In My.Computer.FileSystem.GetDirectories(rutaRaiz)
                indice = carpetaActual.LastIndexOf(System.IO.Path.PathSeparator)
                nodoMadre.Nodes.Add(carpetaActual.Substring(indice + 1, carpetaActual.Length - indice - 1))
                nodoMadre.LastNode.Tag = carpetaActual
                ''''''
                nodoMadre.LastNode.ImageIndex = 0
            Next
        End If
    End Sub

    ''' <summary>
    ''' Devuelve los archivos de un directorio para almacenar en una ListView
    ''' </summary>
    ''' <param name="rutaRaiz">Ruta raiz</param>
    ''' <returns>Una lista de ListViewItem</returns>
    ''' <remarks></remarks>
    Public Function cargarArchivos(ByVal rutaRaiz As String) As List(Of ListViewItem)
        'Crear nueva lista de items para devolver con la función
        Dim lista As New List(Of ListViewItem)
        'Recorrer los ficheros en la colección  
        For Each miFichero As String In Directory.GetFiles(rutaRaiz, "*.*", SearchOption.TopDirectoryOnly)
            Dim archivo As New FileInfo(miFichero)
            Dim miItem As New ListViewItem(archivo.Name.ToString)
            'Cargar los datos y las propiedades  
            With miItem
                'Fecha de modificación  
                .SubItems.Add(archivo.LastWriteTime.ToShortDateString & " " & archivo.LastWriteTime.ToShortTimeString)
                'Tamaño en bytes  
                .SubItems.Add(archivo.Length.ToString)
                'Extensión    
                .SubItems.Add(archivo.Extension.ToString)
                lista.Add(miItem)
                'Form1.ListView1.Items.Add(miItem) ' añadir el item   
            End With
        Next
        Return lista
    End Function
End Class
